with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
with Ada.Finalization; use Ada.Finalization;
with Ada.Containers.Vectors;
with Element; use Element;
with IO; use IO;
with Parser_Filter; use Parser_Filter;

package Parser is

   type Parser is tagged private;

   package Element_Vec is new Ada.Containers.Vectors
     (Element_Type => Element_Type, Index_type => Positive);

   procedure Parse(P : in Parser; Filter : in out Element_Filter_Interface'Class);

   function New_Parser(File : IO.File_Type_Access) return Parser;

private

   type Parser is tagged --new Controlled with
   record
      File_Ptr : IO.File_Type_Access;
   end record;

--     procedure Initialize(P : in out Parser);
--     procedure Adjust(P : in out Parser);
--     procedure Finalize(P : in out Parser);
end Parser;